//
//  BaseViewController.h
//  SafeFoodManagerDemo
//
//  Created by bob on 2017/9/15.
//  Copyright © 2017年 bob. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>
#import "TB_TableView.h"
#import "AppDelegate.h"
#import <MWPhoto.h>
typedef void(^PhotoLoadSuccBlock)(NSString*_Nonnull);

typedef void(^PhotoShowBlock)(NSString*_Nonnull);

typedef NS_ENUM(NSUInteger,TBBlanckType){
    
    //没数据列表
    TBNODateType=0,
    
    //搜索无数据
    TBSearchNoType=1,
    
    //网络出错页面,可点击
    TBReqFalie=2,
    
    //加载中...
    TBReqLoading=3,
    
    //正常的...
    TBNormal=4,
    
    //选择商品
    HBselectShop=5
    
};

@interface BaseViewController : UIViewController<DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>


/**
 图片流浪数组
 */
@property(nonatomic,strong)NSMutableArray * _Nullable ScanPhotoArr;

@property(nonatomic,copy)PhotoShowBlock _Nonnull ImageUrlBlock;

#pragma mark-基本属性
/**
 *  修改状态栏颜色
 */
@property (nonatomic, assign) UIStatusBarStyle StatusBarStyle;

/**
 *  是否显示返回按钮,默认情况是YES
 */
@property (nonatomic, assign) BOOL isShowLiftBack;

/**
 是否隐藏导航栏
 */
@property (nonatomic, assign) BOOL isHidenNaviBar;

/**
 是否隐藏键盘的toolBar
 */

@property(nonatomic,assign)BOOL isHidenKeyToolBar;

/**
 是否 图片浏览/上传图片
 */
@property(nonatomic,assign)BOOL isScanphotos;


/**
 是否隐藏homebtn
 */
@property(nonatomic,assign)BOOL isHiddenHomeBtn;

#pragma mark-登录相关
/**
 是否登陆状态
 */
-(BOOL)isLogin;

/**
 获取userid
 */

-(NSString*_Nullable)GetUserid;

/**
 去登陆
 */

-(void)GotoLoginVC;

/**
 退出登录
 */
-(void)OutLogin;

/**
 获取用户类型
 */
-(NSInteger)getUserType;

#pragma mark-导航栏按钮设置
/**
 导航栏添加文本按钮
 
 @param titles 文本数组
 @param isLeft 是否是左边 非左即右
 @param target 目标
 @param action 点击方法
 @param tags tags数组 回调区分用
 */
- (void)addNavigationItemWithTitles:(NSArray *_Nullable)titles isLeft:(BOOL)isLeft target:(id _Nonnull )target action:(SEL _Nonnull )action tags:(NSArray *_Nullable)tags;

/**
 导航栏添加图标按钮
 
 @param imageNames 图标数组
 @param isLeft 是否是左边 非左即右
 @param target 目标
 @param action 点击方法
 @param tags tags数组 回调区分用
 */
- (void)addNavigationItemWithImageNames:(NSArray *_Nullable)imageNames isLeft:(BOOL)isLeft target:(id _Nonnull )target action:(SEL _Nonnull )action tags:(NSArray *_Nullable)tags;


/**
 导航栏添加图标文字按钮
 
 @param imageNames 图标数组
 @param titles 文字按钮
 @param isLeft 是否是左边 非左即右
 @param target 目标
 @param action 点击方法
 @param tags tags数组 回调区分用
 */
- (void)addNavigationItemWithImageNames:(NSArray *_Nullable)imageNames Titles:(NSArray *_Nullable)titles isLeft:(BOOL)isLeft target:(id _Nonnull )target action:(SEL _Nonnull )action tags:(NSArray *_Nullable)tags;


/**
 导航蓝添加中心视图
 
 @param centView 自定义View
 */
-(void)addCenterView:(UIView*_Nullable)centView;


/**
 创建home按钮

 @param name 名字
 */
-(void)CreatHomeBtnWithName:(NSString*_Nonnull)name isStoreHome:(BOOL)isStoreHome;

#pragma mark-加载视图
/**
 *  加载视图
 */
- (void)showLoadingAnimation;

/**
 *  停止加载
 */
- (void)stopLoadingAnimation;


#pragma mark - 没有数据时的提示

@property(nonatomic,assign)TBBlanckType Type;//空白页类型

/** 配置显示EmptyDataSet的控件 */
- (void)configureNeedShowEmptyDataSetScrollView:(UIScrollView *_Nullable)scrollView;

/** 点击EmptyDataSet NoDataView(封装层, 需要子类重写) */
- (void)actionTapEmptyDataSetNodataView;


#pragma mark - MJ刷新和加载

/**
 配置滚动视图头部刷新 控件
 
 @param scrollView  滚动视图
 @param autoRefresh 是否进入页面就开始刷新
 */
- (void)configScrollViewHeaderRefresh:(UIScrollView *_Nullable)scrollView autoRefresh:(BOOL)autoRefresh;

/**
 配置滚动视图底部加载 控件
 
 @param scrollView 滚动视图
 */
- (void)configScrollViewFooterLoadMore:(UIScrollView *_Nullable)scrollView;

/**
 *  MJ头部刷新(封装层方法, 需要子类继承或者重写)
 */
- (void)actionMJHeaderRefresh;

/**
 *  MJ底部加载(封装方法, 需要子类继承或者重写)
 */
- (void)actionMJFooterLoadMore;

/**
 *  MJ 结束header 和 footer 的刷新
 *
 *  @param scrollView 要停止刷新的 scrollView
 */
- (void)mjEndRefreshing:(UIScrollView *_Nullable)scrollView;

#pragma mark-网络请求页面显示

/**
 网络请求成功配置
 
 @param vc 当前vc
 @param scrollView 当前tableView
 */
-(void)NetRequestSuccess:(BaseViewController *_Nullable)vc scrollView:(UIScrollView *_Nullable)scrollView;

/**
 网络请求失败配置
 
 @param vc 当前VC
 @param scrollView 当前tableView
 */
-(void)NetRequestFail:(BaseViewController *_Nullable)vc scrollView:(UIScrollView *_Nullable)scrollView msg:(NSString *_Nullable)msg;


/**
 *  去上传图片
 */

-(void)UploadPhotosWithImage:(UIImage*_Nullable)upimage anblock:(PhotoLoadSuccBlock _Nonnull )UploadImgaeblock;

//上传多张图片
-(void)UploadPhotosMoreImage:(NSArray*_Nullable)upimage anblock:(PhotoLoadSuccBlock _Nonnull )UploadImgaeblock;

#pragma mark-其他
/**
 *  默认返回按钮的点击事件，默认是返回，子类可重写
 */
- (void)backBtnClicked;

/**
 *  取消网络请求
 */
- (void)cancelRequest;

/**
 *  去浏览图片
 */
-(void)GoToPhotoScanAndIndex:(NSInteger)index;


/**
 去相册浏览图片／或者拍照并上传
 */
-(void)GotoLibaraySelectPhotoNum:(NSInteger)num andIsCantainScan:(BOOL)scan andBlock:(PhotoShowBlock _Nullable )showImageBlock;


/**
 去相处选择上传
 */
-(void)pushTZImagePickerController;


/**
 去拍照
 */
-(void)takePhoto;

@end
